草庐IT

C++ 对和指针

全部标签

c++ - 参数通过引用传递给指针问题

每次我尝试编译我的代码时都会出现错误:cannotconvertparameter1from'int*'to'int*&'测试代码如下所示:voidset(int*&val){*val=10;}intmain(){intmyVal;int*pMyVal=newint;set(&myVal);//我想一次调用该函数,而不是在某处创建一个指针来传递它。由于指针没有构造函数,因此无法完成类似的操作:set(int*(&myVal));有没有其他方法可以通过引用传递指针而不需要创建临时变量?编辑:顺便说一句,我知道为什么代码无法编译(我只是传递可能是int而不是实际指针的地址)。问题是它还能如

c++ - 无效指针 - 为什么?

对C++不是很有经验,我有以下几点:voidread_image(vector*buffer){buffer=newvector(2048);}intmain(intargc,char**argv){vector*buffer;read_image(buffer);deletebuffer;//givesinvalidpointeratrun-timereturn0;}这只是代码的相关部分,基本上我想在read_image()中初始化指针buffer。在运行时,我在尝试释放堆时得到这个:***glibcdetected***./main:free():invalidpointer:0x

c++ - 总是使用指针而不是引用是否可以接受,以便在需要时轻松转换为智能指针?

我知道引用优于指针,但更改所有这些“.”非常乏味。需要时“->”。那么总是使用指针而不是引用是一种可以接受的做法,以便在需要时轻松地将它们转换为智能指针吗?或者有什么方法可以快速更改对指针的引用? 最佳答案 Soisitanacceptablepracticetoalwaysusepointersinsteadofreferences,tobeeasilyconvertthemtosmartpointersifneeded没有。一般来说,always规则总是不好的。(包括这个)。为什么要将引用转换为智能指针?如果它是引用,则无需担心

c++ - 直观地解释指针及其意义?

我很难理解指针,尤其是函数指针,我希望有人能告诉我它们到底是什么以及它们应该如何在程序中使用。特别感谢C++中的代码块。谢谢。 最佳答案 indirection的概念理解这一点很重要。这里我们通过increment(x)传递值(注意创建和操作的是本地拷贝,而不是原始版本):在这里,通过increment(&x)指针(内存地址):请注意,引用与指针的工作方式类似,除了语法类似于值拷贝(obj.member)并且指针可以指向0(“空”指针)而引用必须指向非零内存地址。另一方面,函数指针让您可以像传递变量一样方便地传递和处理函数,从而在运

c++奇怪的std::cout行为使用指针

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whatisthecorrectanswerforcout我刚输出文字,突然注意到。#includeintmain(){intarray[]={1,2,3,4};int*p=array;std::cout这样的行为对我来说很奇怪,为什么会这样?

c++ - std::vector 的替代方案,因为重新分配会使指向元素的指针无效

这可能是一个新问题(我是),但我已经尽可能多地搜索以找到以下问题的解决方案我有以下场景(当然是经过大量提炼的):classContainer{std::vectorobj;};classPointers{std::vectorobj_ptr;};我有一个例程,将Object类型的元素推回Container中的vectorobj,然后将指向同一元素的指针推回obj_ptr。总体思路是obj_ptr[i]==&obj[i]贯穿程序的整个生命周期。我遇到的问题是,每当obj的容量需要增加时,所有指针都会失效,从而使obj_ptr完全无用。我已经尝试过使用最大预期大小(大约10^7)的obj.

c++ - 我什么时候应该按值返回,而不是返回一个唯一的指针

我想知道的是,如何按值返回aCat实际上不同于返回std::unique_ptr在传递它们、内存管理和在实践中使用它们方面。内存管理方面,它们不一样吗?由于按值返回的对象和包装在unique_ptr中的对象一旦超出范围就会触发它们的析构函数?那么,您将如何比较这两段代码:CatcatFactory(stringcatName){returnCat(catName);}std::unique_ptrcatFactory(stringcatName){returnstd::unique_ptr(newCat(catName));} 最佳答案

c++ - 将这种原始指针情况变成 unique_ptr?

我有这样的代码:ISessionUpdater*updater=nullptr;if(eventName=="test")updater=newTestJSONSessionUpdater(doc);if(eventName=="plus")updater=newPlusJSONSessionUpdater(doc);if(updater){boolresult=updater->update(data);deleteupdater;returnresult;}returnfalse;除了使用unique_ptr之外,还有什么办法可以做这样的事情吗?也就是说,只有1次调用update(

c++ - 如何将 double 转换为 float 指针?

我正在尝试将double指针转换为float指针,但我不知道正确的方法。这是我的代码#includeintmain(intargc,constchar*argv[]){//insertcodehere...float*f;doubled=10;f=reinterpret_cast(&d);d=20;std::cout我得到以下结果。RESULT:0Programendedwithexitcode:0如何正确地将double指针转换为float指针?ADD:我期望得到的结果是20 最佳答案 考虑:#include#includeusi

c++ - 删除指针

我想问一下,是不是动态创建一个指针,然后把指针地址改成别的东西,还是删除原来分配的空间?例如:intmain(){intc=50;//Memoryleakint*q=newint;q=&c;deleteq;}究竟是什么被删除或发生了什么?谢谢! 最佳答案 Whatexactlyisgettingdeletedorhappening?内存泄漏和未定义的行为。当您执行q=&c;时,您将失去对newint分配的内存的唯一跟踪。没有人为您跟踪这个,没有垃圾收集器,它只是丢失并且无法恢复。然后当您执行deleteq;(其中q分配给&c)时,您